ePublisher 2026.1 Release Notes This page lists every improvement and fixed issue in the ePublisher 2026.1 release. For the release highlights, see What's New in the ePublisher online help. Improvements Reverb 2.0 Added draggable menu width with mouse, touch, and keyboard support; the chosen width persists per browser via localStorage and is clamped between 200px and 600px (EPUB2714). Redesigned Assistant chat message styling for narrow vertical layouts with role labels above each turn, full-width assistant prose, and compact right-aligned user bubbles (EPUB2715). Replaced O(N²) breadcrumb hydration in the search panel with a coalesced FIFO queue and a single drain that flushes synchronously when the panel opens, eliminating the per-parcel main-thread stalls that scaled with output size (EPUB2716). Progressive hydration for large-output projects: landmarks persist to localStorage and rehydrate at parse time so #/landmark URLs resolve immediately on revisits, search and book-index data persist to IndexedDB for warm-cache reads, and remaining-parcel hydration defers to browser idle so the initial content paint is no longer blocked by background data loading. URLs that need parcel or landmark resolution still wait for the full gate (EPUB2717). Fixed Reverb 2.0 output where the page would not finish loading for projects with minimal configuration. The output now generates a parcel for each top-level project group automatically when no explicit merge configuration is present (EPUB2747). Landmark ID option now supports Source ID passthrough on a per-paragraph-style basis, allowing writers to architect which important heading IDs (custom aliases) get exposed in Reverb URLs (EPUB2718). Reverb 2.0 HTML id attributes and anchors no longer use the ww prefix; custom CSS or JavaScript that targeted these may need updated selectors (EPUB2722). Added support for the AI Assistant button in the Reverb 2.0 menu navigation. The button is enabled by the new Generate AI Assistant Format setting and appears alongside the Contents and Index buttons, with the navigation row automatically adjusting when buttons are toggled (EPUB2657). Added a Hide AI Tab when file local setting in the AI Features group of WebWorks Reverb 2.0. When enabled, the AI Assistant tab is hidden at runtime if the generated output is opened over the file: protocol, but remains visible and functional when the same output is served over http: or https:. This allows a single generated artifact to be bundled locally with a desktop product and mirrored to a public web server (EPUB2760). Removed the unused data-highlight-require-whitespace HTML attribute from Reverb and Reverb 2.0 page output; the attribute was last consumed by search JavaScript before the 2024.1 release and is no longer read (EPUB2755). Fixed FrameMaker-rasterized images being upscaled to the rule's max-width and max-height when the natural frame fits inside those bounds. Generated JPEG and PNG output now matches the anchored frame's natural pixel dimensions, restoring the 2024.1 behavior where max-width and max-height act as upper bounds rather than scale targets. This regression was introduced in 2025.1 (EPUB2767). Added a Generate Knowledge Base Per Parcel setting in the AI Features group of WebWorks Reverb 2.0. When enabled, the AI Assistant knowledge base is emitted as one zip archive per top-level project group (knowledge-parcel-<parcel-name>-<generation-hash>.zip) instead of a single project-wide knowledge-<project-name>-<generation-hash>.zip, so incremental publishing workflows can re-upload only the changed parcel's content to the assistant vector store (EPUB2762). Added search character folding so equivalent characters are treated as the same search term. By default the curly apostrophe (’) and modifier-letter apostrophe (ʼ) fold to the straight apostrophe (') in both the search index and the search query, so a search for either spelling of a word such as d’activité returns the same results; displayed text keeps its original typography. The equivalent-character set is locale-driven and can be customized per language (EPUB2776). Changed the naming of the WebWorks Reverb 2.0 AI Assistant knowledge base archives so each name includes the project or parcel name and an 8-character per-build generation hash. The single project-wide archive is now named knowledge-<project-name>-<generation-hash>.zip (previously Knowledge Base.zip), and each per-parcel archive is named knowledge-parcel-<parcel-name>-<generation-hash>.zip; names are lowercase with spaces replaced by hyphens. Because the generation hash changes with every build, automation that uploads or deploys these archives should match them by pattern (for example, files beginning with knowledge-) rather than by an exact filename (EPUB2782). Improved WebWorks Reverb 2.0 AI Assistant streaming performance in long conversations. While a response streams in, the output now updates only the in-progress message and re-renders its Markdown on a short throttle, instead of rebuilding the entire conversation and re-parsing every prior message on each token. This removes the progressive slowdown that previously scaled with conversation length (EPUB2764). The WebWorks Reverb 2.0 AI Assistant now bundles its DOMPurify (HTML sanitizer) and markdown-it (Markdown renderer) libraries directly into the generated output instead of loading them from a third-party CDN (cdn.jsdelivr.net) at runtime. Generated documentation no longer makes an external request for these libraries, so the Assistant works in offline and air-gapped deployments and avoids the first-use network round trip. The HTML sanitizer is now always applied to Assistant responses; previously, if the CDN was slow or unreachable, sanitization could be skipped. The bundled library versions (DOMPurify 3.4.8 and markdown-it 13.0.1) are pinned with the product so upgrades are explicit (EPUB2765). Added a Generate Groups setting to WebWorks Reverb 2.0 (enabled by default). When disabled, the target generates a content-free shell: the full Reverb chrome (header, footer, splash page, search, and an empty navigation manifest) with no topic pages and no companion PDF. This lets a site's navigation and content be composed from independently generated sources rather than from the project's own documents (EPUB2793). WebWorks Reverb 2.0 now reports unexpected runtime errors to the browser console instead of silently swallowing them, so a broken output (for example, a navigation parcel that never binds and leaves the page spinner running) now emits a clear console message identifying the affected subsystem and data, making such issues diagnosable without a debugger. Errors that Reverb expects as normal control flow (timing and existence probes, and cross-origin or private-mode access that is designed to fail on the file: protocol) remain silent, so a healthy load produces no new console output (EPUB2791). Reduced the time before the WebWorks Reverb 2.0 AI Assistant begins responding. Sending a question and receiving the streamed answer are now handled in a single request to the assistant service instead of two back-to-back requests, so the first words of a response appear sooner — most noticeably on slower or higher-latency connections. Responses still stream in word by word, and message persistence, citations, and error handling are unchanged (EPUB2766). Added a thinking and reasoning indicator to the WebWorks Reverb 2.0 AI Assistant. When an assistant is configured to reason before answering, the chat now shows a "Thinking…" status — upgrading to "Reasoning…" once the model reports it is reasoning — in the standard assistant message presentation, and streams the model's reasoning summary in a lighter shade above the answer. The indicator and summary clear as soon as the answer begins to arrive. Assistants without reasoning enabled are unaffected. The conversation list was also corrected so a saved chat's title no longer includes the hidden page-context text that is sent with each question (EPUB2803). Fixed a WebWorks Reverb 2.0 and Reverb 3.0 keyboard accessibility issue where pressing the Tab key could move focus into the search results or popup frame and then out of the document into the host browser's chrome (address bar, menus, and toolbar buttons), leaving keyboard users lost. These frames are now excluded from the Tab order; search results remain reachable through the existing focus management that moves focus to the first result after a search (EPUB2724). Added an Optimized reader mode setting to the Accessibility group of WebWorks Reverb 2.0. When enabled on a target, the output is streamlined for screen-reader and keyboard-only users: tab focus and screen-reader landmarks are removed from decorative chrome controls (the side-menu toggle, Index tab, search submit and scope controls, previous, next, home, translate, back-to-top, breadcrumbs, and the page toolbar's print, email, PDF, social share, and feedback buttons), leaving the skip-to-content link, search box, table of contents, and page content reachable. A streamlined keyboard contract adds Alt+S, Alt+M, and Alt+C jumps to the search box, menu, and content (with F6 cycling as a fallback), routes Tab through search, table of contents, then content, advances to the next topic when Tab reaches the end of a page, auto-focuses the first search result, and clears the search box on Escape. The setting is off by default, so existing output is unchanged unless a publisher enables it (EPUB2723). Added federated parcel composition support to WebWorks Reverb 2.0, allowing independently built and published outputs ("parcels") to be assembled into one unified site without rebuilding them. Each build now emits a durable composition descriptor alongside its content recording the group's navigation entry and page map; a project with no groups now builds the complete site chrome with an empty navigation manifest, for use as the composed site's shell; and the runtime now tolerates a missing parcel — the table of contents, search, index, and landmarks each skip an absent parcel's data with a console warning instead of leaving the page loading indefinitely (EPUB2830). Improved how the WebWorks Reverb 2.0 AI Assistant presents the usage limits an assistant's owner configures. Publicly deployed assistants spend the owner's prepaid balance on every question, so the assistant service limits how many messages an individual reader may send and can pause an assistant that reaches its daily budget. Readers are now identified by an anonymous token the assistant service issues and the output stores in the browser, so these limits apply per reader rather than to everyone sharing a network address; the token identifies no one and readers may clear it at any time. When a limit is reached, the chat explains why in plain language instead of showing a generic error — a reader who has used their message allowance sees a countdown to when they can continue and the message box is disabled until then, an assistant paused by its daily budget reports that it is temporarily unavailable, and a conversation that has grown too long to continue points the reader to the Delete Chat button to start a new one. In each case the unanswered question is returned to the message box rather than left in the conversation. Outputs generated before this release continue to work unchanged (EPUB2829). Improved WebWorks Reverb 2.0 search caching for multi-parcel sites so that updating one parcel no longer discards every parcel's cached search data. Each parcel's search data now carries its own content-derived cache key, so a returning visitor re-downloads search data only for the parcels that actually changed; unchanged parcels continue to serve search results from the browser's local cache. This most benefits federated and incrementally deployed sites, where a single high-velocity parcel (for example, release notes) can be republished without forcing a full search-data reload of the entire site. No hard refresh is required for updates to appear, and outputs generated before this release continue to work unchanged (EPUB2789). Improved how WebWorks Reverb 2.0 manages its browser-side cache when several help sets are hosted on one web domain. Each help set keeps its own cache, but nothing previously reclaimed the caches of help sets a reader stopped visiting, so on a shared domain the browser's storage allowance could silently fill up, at which point caching stopped working for every help set on that domain. Reverb now records when each help set's cache was last used, keeps the total within a defined budget by discarding the least recently used caches first, reclaims space automatically so the help set currently being read can always store its cache, and removes cached search data for help sets not visited within thirty days (where the browser supports enumerating its databases). The help set currently being read is never evicted, single-site behavior is unchanged, and stored AI Assistant conversations are never touched (EPUB2790). Menu navigation button dividers are now position-aware. The dividers between the Assistant, Contents, and Index buttons previously assumed the Index button always rendered rightmost, so disabling Index while showing the other two left the trailing button painting a divider against nothing whenever a skin customizes the divider width (dividers are invisible at their default zero width). All three buttons now share the same divider defaults, and whichever button renders last in the row suppresses its trailing divider. The Classic, Corporate, and Social skins, which carry their own copies of the affected style rules, received the same correction; the Metro skin's full-frame button design is intentionally unaffected, and the Neo skin inherits the fix (EPUB2754). Added a dedicated CSS customization layer: a new custom.scss compiles to custom.css and is linked as the last stylesheet on every page, so custom rules win the cascade everywhere - content pages, popups, search, the splash page, and the top-level frame - without overriding any stock stylesheet. Copy custom.scss into a project override folder to add selectors, or override the color, border, size, and font variable partials to restyle standard structures (EPUB2908). The splash page now displays a Groups Grid - a responsive set of entry-point cards generated from the help set's groups and Merge Settings containers - replacing the static splash image. Each card shows a group or container title with its first-level entries as links, giving readers a one-page map of the entire help set; help sets that disable the Contents tab in favor of the AI Assistant keep full browse navigation through the grid. The grid renders from the same data as the Menu, so federated compositions are included automatically. Projects that overrode the splash.png image should override Splash.asp instead; the grid's appearance is styled through the new splash groups variables and the custom.scss layer (EPUB2907). The AI Assistant now displays the assistant's configured avatar image. Reverb reads the avatar set for the assistant in WebWorks Platform and renders it everywhere the assistant is represented — the welcome screen, each assistant reply, the thinking and reasoning indicator, the streaming reply, and the conversation list header — in place of the generic icon. Assistants with no avatar configured, and avatars whose image cannot be loaded, continue to show the generic icon, so existing help sets are unchanged until an avatar is set. The image is cropped to each skin's existing avatar shape and size, so both square and wide source images display correctly and the message list does not shift as avatars load. Skins that need to style a photo differently from the icon can target the new ww_skin_assistant_avatar_has_image class (EPUB2911). WebWorks Reverb 2.0 output now reports when its index.html or a parcel page has been reformatted by an XML or HTML pretty-printer. Such tools rewrite an empty element such as a script or iframe tag into self-closing form, which is invalid in HTML and stops the page from loading: the output sat on its loading indicator with nothing in the browser console to explain why, because the scripts that would have reported the problem never ran. A guard built into the page itself — written so that the same reformatting cannot disable it — now reports a specific console error naming the cause and the correction, and the generated files carry a comment warning against reformatting them. A healthy page reports nothing (EPUB2792). Fixed a WebWorks Reverb 2.0 build failing when a Merge Settings container holds exactly one group. The container and its single group resolved to the same navigation identifier, so the group's composition manifest received two root elements and the build stopped with an invalid-XML error naming the manifest file. A container holding one group now builds normally (EPUB2912). Added an Alt+A keyboard shortcut to the WebWorks Reverb 2.0 Optimized reader mode. On an output target that also enables the AI Assistant, Alt+A opens the Assistant panel and places focus directly in the chat message box, joining the existing Alt+S, Alt+M, and Alt+C jumps to the search box, menu, and content; while the chat interface is still loading, focus lands on the Assistant tab and moves into the message box as soon as it is ready. On output targets without the AI Assistant, Alt+A does nothing (EPUB2927). Fixed WebWorks Reverb 2.0 links no longer responding after the browser Back button when the output is viewed over HTTP. A page restored by Back was missing the routing that carries link clicks through the Reverb frame, so ordinary links fell back to bare in-frame navigation and runtime links - such as #/<source-id> links authored in Markdown++ - did nothing when clicked; viewing the same output from file: hid the problem. Links on a page restored by Back now behave exactly as on first load. Reverb 3.0 received the same correction (EPUB2947). Fixed the links report flagging runtime hash links as unresolved. A link such as [What's New](#/whats-new) in Markdown++ - or any #/, #context/, #page/, or #search/ link - resolves in the reader's browser rather than at generation time, but the links report classified every one as an unresolved link warning even though the published link works. WebWorks Reverb 2.0 and Reverb 3.0 targets now classify these links under a new Runtime hash link report setting (default: Ignore), so the links report only warns about anchors that are genuinely missing. Set Runtime hash link to Warning to restore the previous auditing behavior. Other output formats, where such links genuinely cannot resolve, keep the unresolved link warning (EPUB2948). Improved WebWorks Reverb 2.0 landmark caching for multi-parcel sites so that updating one parcel no longer leaves runtime hash links stale for returning readers. Landmark data previously shared one site-wide cache key, so a parcel redeployed without the site shell could serve old landmark data from the browser's caches indefinitely - links to new or renamed topics landed on the not-found page and no ordinary reload recovered. Each parcel's landmark data now carries its own content-derived cache key, stamped on the site's navigation manifest exactly like the per-parcel search key, so a returning reader re-downloads landmark data only for parcels that actually changed; unchanged parcels continue to resolve #/<source-id> and #context/ links from the browser's local cache, and a redeployed parcel's new links resolve immediately without a hard refresh. This most benefits federated and incrementally deployed sites, and outputs generated before this release continue to work unchanged (EPUB2949). The AI Assistant now renders a WebWorks attribution line beneath the message box when the assistant's WebWorks Platform plan calls for one. The line reads "AI Assistant · Powered by WebWorks" in muted footer-scale text, links to webworks.com in a new tab, and stays in view on the welcome screen and throughout a conversation. WebWorks Platform decides per assistant whether it appears — assistants on a plan that includes white labeling emit no attribution markup at all — and a plan change takes effect the next time a reader loads the help set, with nothing to re-publish (EPUB2946). Fixed WebWorks Reverb 2.0 composed sites replaying stale navigation and search state for returning readers after a site shell update. The composed cache key was derived from parcel content alone, so redeploying only the shell and recomposing left the key unchanged, and returning browsers kept trusting locally stored state that referenced the previous shell - surfacing as console errors about unknown groups and unreliable navigation until some parcel happened to be republished. The composed cache key now also incorporates the shell build's own generation hash, so a shell redeploy followed by a recompose refreshes every returning reader's cached state automatically. Site shells deployed by earlier releases carry no generation hash in their deployed record; composing against one logs a warning that a shell-only redeploy cannot refresh reader caches until the shell is rebuilt and redeployed with the current version (EPUB2952). Fixed the WebWorks Reverb 2.0 search page stopping with a console error when its markup and the enclosing site's search scope state come from different builds - for example, mixed chrome generations on a federated deploy destination around a site shell update. A search page built without the group filter markup that received scope titles from a scope-enabled site aborted before running the search, which could leave a search entry loading indefinitely. Such a mismatch now degrades gracefully: the filter display is omitted and the search runs normally. Console diagnostics for a failed message dispatch also now name the failing action instead of "undefined". Reverb 3.0 received the same search page correction (EPUB2954). Fixed federated WebWorks Reverb 2.0 sites serving outdated shared scripts and styles after a site shell update. Shared chrome files such as scripts/common.js live at stable paths owned by the site shell, but content pages reference them with a cache stamp from their own parcel's build - which a shell-only redeploy never changes - so CDN edges and reader browsers could keep serving the previous shell's files for up to a year, mixing old scripts with new pages. Two changes close this: an S3 deploy now compares each re-uploaded cached file against the object it replaces and includes the changed paths in its CloudFront invalidation, so edges refresh immediately; and shared chrome files are uploaded with a five-minute freshness window instead of a one-year immutable policy, so reader browsers pick up a shell update within minutes. Assets addressed by their own build's content - per-parcel search and navigation data, images - keep the long-lived immutable policy, and the first deploy after this release refreshes existing deploy destinations automatically (EPUB2953). Fixed federated WebWorks Reverb 2.0 deployments omitting shared files that only content pages use. Chrome that a page or popup template references - scripts/popup.js in the standard format, plus any files a project's template overrides add, such as a syntax highlighter - was emitted only when a matching page was generated, so a zero-document site shell never produced it and no federated deploy delivered it; composed sites served those files only if an earlier deployment happened to leave copies behind. The site shell build now inventories the page and popup templates alongside the other chrome templates and emits every file they reference, so the shell's deploy owns the complete set and a fresh federation onto a clean deploy destination serves everything its pages use (EPUB2959). Fixed the WebWorks Reverb 2.0 AI Assistant failing with a misleading network error when used on very large pages. Every message sent to the Assistant includes the text of the currently open page as context; on a very large page - a complete release notes page, for example - the resulting request exceeded the WebWorks Platform's message size limit, the send was rejected, and the reader saw only "Failed to send message: Failed to fetch", which suggests a network problem and gives no hint that page size was the cause. The page context is now capped to a sentence-aligned budget before sending, and earlier turns no longer re-send their page snapshots - the Platform reads page context only from the newest message - so the Assistant works from any page and long conversations stay fast to send. Error reporting also improved: a message the service refuses as too long now shows the service's guidance and returns the typed text to the input, and a send the service rejected or never received says so instead of echoing the browser's opaque network message (EPUB2955). Added a Default Tab setting to the Menu group of WebWorks Reverb 2.0 that controls which menu navigation tab — AI Assistant, Table of Contents, or Index — is selected when a reader first opens the help set. The default, Automatic, selects the AI Assistant tab when the output target generates it, then Table of Contents, then Index. An explicit choice applies when that tab is present in the output and otherwise falls back to the automatic order. Output targets with Optimized reader mode enabled now also open the resolved default tab at startup instead of always opening the Table of Contents (EPUB2961). Formats Upgraded the Apache FOP engine used to generate PDF (XSL-FO) output from version 2.8 to 2.11, including the underlying Apache Batik (1.19) and Apache PDFBox (3.0) libraries. Generated PDF output is unchanged for existing projects; the upgrade incorporates upstream layout and rendering fixes along with current dependency security updates. The DITA Adapter's PDF (XSL-FO) generation uses the same upgraded engine (EPUB2786). Added support for using a Markdown++ date value as the document last modified date in WebWorks Reverb 2.0 and Reverb 3.0 output. When the Document Last Modified Date page setting is enabled, a date front matter key or an authored date marker (case insensitive) on a topic is used as that topic's last modified date; topics without one continue to show the file system last modified date. This is useful for assembled Markdown++ sources, where the file system date often reflects the assembly document rather than the individual topic (EPUB2805). Fixed Symbol-font characters (such as the Greek lowercase mu, capital Delta, and the square-root sign) being dropped from PDF (XSL-FO) output, where they appeared as a missing-glyph box. These characters are emitted at their standard Unicode positions tagged with the Symbol font; Apache FOP auto-detected the Windows SymbolMT font for that family, but SymbolMT does not map the characters at those positions, so the glyphs could not be found. The bundled Apache FOP configuration now maps the Symbol font family to a font that contains the characters at their standard Unicode positions, so they render correctly; other fonts are unaffected (EPUB2811). Build log messages produced by the Apache FOP engine (PDF - XSL-FO output) and by the DITA Open Toolkit (DITA source documents) are now recorded line by line at their actual severity instead of as one block: lines carrying a warning or error marker are logged as warnings or errors, and the remainder of the tool's progress transcript is logged as informational. On a successful build, a spurious note from the tool no longer flags its entire transcript as a warning, and an AutoMap job with Verbose logging disabled (or a --quiet run, EPUB2856) records only the lines that need attention. Failed runs still record the complete transcripts, and the per-target generate.log always keeps full detail (EPUB2858). Fixed PDF - XSL-FO builds reporting success when the Apache FOP engine fails to render a PDF. A rendering failure — for example, a validation error over the generated FO file — left the affected PDF silently missing from the output while the build completed without any error. The failure is now recorded as a build error that names the missing PDF file, and an AutoMap build exits with a failure status, so a missing PDF can no longer go unnoticed (EPUB2926). Fixed table of contents entries for paragraphs with the Generate output style option disabled producing dead, link-less entries — most visibly breadcrumbs rendered as plain text in WebWorks Reverb output. Such an entry now falls back to the destination of the nearest entry beneath it that generates output, so its table of contents and breadcrumb links navigate to the first generated page under that heading. In addition, WebWorks Reverb 1.0, 2.0, and 3.0 breadcrumbs no longer render a hyperlink for an entry that resolves to the page currently being viewed; it is shown as plain text instead of a link that navigates back to the same place (EPUB2615). Fixed Graphic style dimension properties having no effect on raster images in PDF - XSL-FO output. Width, Height, Content Width, and Content Height set on a Graphic style were silently discarded, leaving the style's Scale option — which resamples the image's pixels at generation time and visibly degrades quality — as the only way to publish an image at a reduced size. Explicit dimension properties now size the image in the published PDF: the Apache FOP engine scales the full-resolution original at render time, so the image stays sharp in print and at high zoom. A Content Width or Content Height percentage is relative to the image's own size (20% renders the image at 20% of its natural dimensions), and a Width or Height length (for example 1.25in) scales the image proportionally into that box. Images without explicit dimension properties publish exactly as before, and styles that rely on the Scale option are unchanged (EPUB2923). Fixed preformatted paragraphs — most commonly Markdown fenced code blocks — taller than one page overflowing the bottom margin in PDF - XSL-FO output. Every line of such a paragraph was chained to its neighbors as a single unbreakable unit, so a code block longer than the page ran off the bottom edge and the remaining lines were clipped from the PDF instead of continuing on the next page, and no style setting could recover the missing content. A paragraph whose White space property resolves to a pre value now fills the page to the bottom margin and continues on the following page. Hard line breaks in ordinary paragraphs still keep their lines together across a page break exactly as before, and setting White space to normal on a style restores that keep-together behavior for it (EPUB2937). Fixed inline code spans in Markdown++ output publishing angle brackets and ampersands as HTML character entities. Markdown renderers do not decode entities inside a code span, so a span written in the source as <, >, or & displayed as literal entity text such as < on the published page. Inline code spans now publish the raw characters, exactly as code fences always have. In addition, a code span whose content itself contains a backtick now publishes in the standard Markdown form for that case: the span's delimiter grows to a backtick run longer than any run inside the content, with one space of padding on each side when the content begins or ends with a backtick (EPUB2939). Markdown++ output no longer escapes underscores inside words. Snake-case identifiers common in API and scripting documentation, such as get_my_file, previously published with a backslash before every underscore. An underscore with a letter or digit on both sides cannot begin or end emphasis, so the escapes were unnecessary; such underscores now publish clean, in headings, paragraph text, lists, and table cells alike. Underscores at word boundaries, as in __init__, remain escaped because unescaped they would render as emphasis. The Markdown++ source adapter applies the same rule when reading documents, so an intra-word underscore in source text is treated as a literal character rather than emphasis — snake-case names in Markdown++ source no longer publish with stray italics — and the adapter now also reads code spans delimited by backtick runs, matching what Markdown++ output emits, so published Markdown republishes without loss (EPUB2940). Fixed a footnote inside a nested table publishing its footnote text twice — once after the inner table and again after the enclosing table — in every HTML-based output format and in PDF - XSL-FO output, where the duplication also skewed the enclosing table's own footnote numbering. A table now emits only its own footnotes, and a nested table's footnotes appear once, after the nested table itself (EPUB2942). Adapters Added DITA Adapter option to use DITA source IDs as paragraph IDs in generated output (EPUB2706). Hardened how the Markdown helper adapter passes each conversion request to its helper process. The request is now staged in a temporary file that the command interpreter redirects to the helper's standard input, rather than written to the child process's standard-input pipe. This makes source-document conversion reliable when AutoMap is launched by a parent process that redirects its standard input to a non-console pipe, such as continuous-integration runners and automation or agent harnesses; interactive console and Designer/Express builds are unaffected (EPUB2774). Added support for Adobe FrameMaker 2026 (version 18, 64-bit): it is detected and selectable in Designer, Express, and AutoMap, the WebWorks client deploys to the FrameMaker 2026 plugins folder, and FrameMaker 2026 documents publish through a target (EPUB2783). Fixed unbalanced If/End If blocks in the Word Add-in (Transit) registry-fallback chain that locates the ePublisher Express executable, restoring consistent, parallel structure across the version-fallback levels (EPUB2728). Fixed Microsoft Word source document conversions failing on systems with recent Windows updates (June 2026, the KB5094126 family). Those updates changed how Windows passes arguments into Word's automation interface, so ePublisher's macro calls could arrive with empty document paths — conversions failed with Adapter "Word" failed in method "DuplicateDocumentAndApplySettings" at step "3: Word.BeginPreProcessPhase", and generated output was missing images. The Word adapter now passes arguments in a form unaffected by the Windows change, so Word conversions work regardless of Windows patch level (EPUB2933). Fixed DITA cross-references to non-DITA files — for example an xref to a PDF stored alongside the source topics — publishing as plain text with the referenced file missing from the generated output. The DITA Open Toolkit's map-first preprocessing renames such link targets to hashed temporary names without recording a way back to the original file, so the generation log warned that a file with a 40-character hexadecimal name does not exist, the link was dropped, and the file was never copied as a baggage file. Sources are now processed with the toolkit's classic preprocessing, which preserves link targets: the cross-reference publishes as a working link and the referenced file is copied into the output's baggage folder. The fix applies when the DITA Open Toolkit version adapter setting is 4.4, its default; projects explicitly set to an older toolkit version are unchanged (EPUB2941). Fixed Microsoft Word footnotes and endnotes that use a custom reference mark (for example an asterisk chosen in Word's Insert Footnote dialog) publishing with an auto-generated number injected in front of the mark, so a footnote authored as * rendered as 1* at the reference and 1 * in the footnote text. A custom-marked note now publishes exactly as authored: the mark itself is the footnote reference and links to the footnote text, and custom marks no longer consume a footnote number — matching Word, where automatic numbering skips them. In addition, the footnote reference link in WebWorks Reverb 1.0, 2.0, and 3.0 output now targets an anchor that exists on the published page, so clicking a footnote reference jumps to its footnote text (EPUB2943). Markdown Fixed Markdown++ table output where a header cell using rowspan that extended into the first body row produced a column count mismatch (EPUB2719). Added YAML front matter handling to the Markdown adapter. Flat key-value pairs at the top of an .md file are stripped from the published content and converted into a Markdown++ markers directive attached to the document's first content block, so metadata such as title, author, date, and status flow through to the WIF as markers instead of producing stray paragraph or horizontal-rule output (EPUB2623). Markdown++ front matter keywords and description keys now resolve to the Keywords and Description marker types regardless of letter case, so lowercase keys (the common YAML convention) populate the generated keywords and description meta tags the same as the capitalized forms. Previously only the exact capitalized keys matched the marker rules and other casings were silently ignored (EPUB2806). Fixed a trailing blank row separator in a Markdown++ multiline table producing a spurious empty table row without cell structure in the generated document data, which also caused the table's recorded column count to be zero. A blank pipe row in a multiline table is the row separator syntax, so a separator that opens the table body, closes it, or immediately follows another separator no longer emits a row; the published table now matches the authored rows exactly. Tables in standard (single-line) Markdown syntax are unaffected, where a row of empty cells remains legitimate content. Previously, PDF (XSL-FO) generation was hardened to tolerate such rows (EPUB2633); with this fix the Markdown adapter no longer produces them (EPUB2635). Improved Markdown++ duplicate-alias diagnostics and link-target resolution. A custom alias now always claims its identifier: when a heading's auto-generated slug matches a custom alias defined elsewhere in the document, the custom alias keeps the identifier, the heading remains addressable under a suffixed anchor, links to the identifier reach the aliased element, and no warning is emitted. Only a genuine duplicate—two directives defining the same custom alias—is reported, now with the stable Markdown++ diagnostic code MDPP008 so authors and downstream tooling can filter, suppress, or escalate it. Previously both situations produced the same generic duplicate-alias warning, and a heading appearing earlier in the document would take the identifier, silently redirecting links intended for the alias's element to the heading instead (EPUB2756). Fixed standard Markdown image alt text being dropped from generated output. The first parameter of —the canonical Markdown alt-text field—now maps to the HTML alt attribute, and the quoted title maps to the HTML title (tooltip) attribute, across all HTML-based formats. Previously the alt text was ignored and the title text populated both attributes, so images authored with standard Markdown conventions published with an empty alt, inaccessible to screen-reader users. An image without authored alt text emits alt="", marking it decorative; a title is omitted unless authored. Images authored as  that relied on the title also populating alt now publish with an empty alt—move the text to the alt field, or author both fields. WebWorks Reverb 3.0 SVG images rendered as img elements also now carry an alt attribute, where previously none was emitted. Output generated from FrameMaker, Word, and DITA sources is unchanged (EPUB2725). Fixed publishing a blockquoted code fence to Markdown++ output producing invalid markdown. The interior lines of the fenced block lost their blockquote prefix, and a raw internal XML element leaked into the generated text in its place. All fence lines—delimiters and interior—now carry the blockquote prefix, and the fence content is preserved verbatim, including directive comments and markdown-significant characters. The same correction applies to the markdown produced for the WebWorks Reverb 2.0 and 3.0 AI Assistant knowledge base, which uses the same serializer (EPUB2553). Fixed paragraph styles using the markdown blockquote syntax property splitting into separate quotes in Markdown++ output. The blank separator line between consecutive blockquote-syntax paragraphs was emitted without the quote prefix, which terminates a blockquote in markdown—one continuous quote published as several, and on republishing through the Markdown adapter the original paragraph style was lost on all but the first paragraph. Consecutive blockquote-syntax paragraphs now publish as one continuous quote with the separator line prefixed. Structural blockquotes and all other markdown output are unchanged (EPUB2898). Fixed paragraph content beginning with runs of spaces or tabs publishing as accidental indented code blocks in Markdown++ output. Four or more leading spaces open a code block in markdown, and source content routinely carries such runs. A leading whitespace run on a paragraph's raw content—or on its auto-number, which leads the line when present—is now compressed to a single space; inline formatting in the content is preserved. Fenced code content keeps its indentation verbatim, and the same correction applies inside blockquotes, list items, and multiline table cells. Leading whitespace inside generated table cells is likewise compressed, which can visibly change cell padding in regenerated markdown while preserving column alignment (EPUB2548). Added backslash escaping for Markdown++ variable references. Writing \$product_name; publishes the literal text $product_name; without substitution—the backslash is consumed and the reference is not resolved—while normal references continue to resolve as before. Any backslash immediately preceding a variable reference suppresses substitution, matching the Markdown++ specification's formal grammar, and code spans and fenced code remain excluded from variable processing. Escaped references also no longer register phantom entries in the project's scanned variable list (EPUB2711). Markdown++ duplicate-alias collision suffixes now use the specification's hyphen separator. When two headings produce the same auto-generated slug, or two directives declare the same custom alias, the later occurrence is disambiguated as name-2, name-3, and so on (previously name_2), and a generated suffix that would match an authored alias or heading slug keeps incrementing until unique. Note that regenerating existing output changes previously collision-suffixed anchors (name_2 becomes name-2), so deep links, bookmarks, or context-sensitive help targets pointing at such anchors must be updated once. Authors who link to specific headings are encouraged to declare explicit alias anchors, which are stable across builds (EPUB2893). Markdown++ alias and heading-slug identifiers are now Unicode-normalized (NFC) before sanitization. Previously, an accented alias or heading authored in decomposed form (base letter plus combining accent) lost its accent: a decomposed #Café alias produced the anchor Cafe- with a stray hyphen, and a decomposed ## Café heading slugged to cafe—a different anchor than the precomposed spelling of the same text. Both spellings now produce identical, accent-preserving anchors, and duplicate aliases that differ only in Unicode composition are reported and disambiguated like any other duplicate. Anchors generated from decomposed-form content change accordingly on regeneration; this lands alongside the collision-suffix change above (EPUB2893) so anchor identity settles in a single release. Pure-ASCII content is unaffected, and aliases differing only in letter case remain distinct (EPUB2904). Markdown-sourced content now publishes semantic HTML elements by default. The Markdown adapter records the HTML element implied by each construct in the generated style catalog, so an ATX heading publishes as <h2 class="Heading_2"> rather than <div class="Heading_2">, and paragraphs, block quotes, fenced code, horizontal rules, and lists publish as p, blockquote, pre, hr, and ol / ul / li. Setext headings underlined with = and - publish as h1 and h2, and bold, italic, inline code, and strikethrough publish as strong, em, code, and del. An HTML tag style property set explicitly in the project still takes precedence, so existing customizations are unaffected; a project that relies on the previous div and span defaults can restore them by setting the HTML tag property explicitly on the affected styles. Generated stylesheets emit the previous div and span selectors alongside the semantic ones so hand-written CSS keeps matching, and the affected styles now declare zero margins so the rendered spacing is unchanged. Level-six Markdown headings (######) also gained a table of contents level, so they appear in generated contents and round-trip through Markdown++ output instead of publishing as plain paragraphs (EPUB2726). Fixed multiline Markdown tables ignoring the table's Cell Head and Cell Body paragraph styles. Cell text in a table marked multiline was rendered with the generic Paragraph style nested inside the cell style, so formatting set on the <TableStyle> Cell Head / Cell Body paragraph styles (font size, color, and so on) had no visible effect and cells published with default body formatting. Cell text now carries the cell style directly, exactly as in tables without multiline. Paragraphs in a cell that name an explicit style with a <!--style:...--> directive keep that style, and lists, block quotes, and code fences inside cells keep their usual styles. Projects that restyled the generic Paragraph style to compensate should move that formatting to the cell styles, which multiline cell text now follows (EPUB2921). Fixed Table style column-width options having no effect on Markdown-sourced tables. Markdown tables published without column definitions in the document model, so First Table Cell Width, Last Table Cell Width, and Use document cell widths silently produced no column sizing in PDF - XSL-FO output and Apache FOP sized every column to its content. Markdown tables now declare one column definition per column, the same structure FrameMaker, Word, and DITA sources provide, so the column-width options size Markdown table columns exactly as they do for those sources. Markdown itself does not author column widths, so Use document cell widths has no widths to apply for Markdown sources; use First Table Cell Width / Last Table Cell Width, which now take effect (EPUB2924). Fixed Markdown link targets with a URI scheme other than http or https - such as mailto: email links - publishing as broken local file paths. Such a target was rebased against the source document's folder as if it were a relative file link, so generation logged a spurious warning naming a file such as ...\mailto:info@webworks.com that does not exist, and the published link pointed at that nonexistent file. A scheme-qualified target now passes through untouched in every output format, so an email link publishes as a working mailto: link, and ftp:, tel:, and other scheme links are likewise preserved. Relative file links, same-document anchor links, and absolute paths publish exactly as before (EPUB2932). Fixed Markdown++ condition names containing hyphens never being evaluated. The Conditions reference documents - as a valid condition-name character, but the adapter did not recognize a hyphenated name such as writer-notes or print-only: the condition never appeared in the Conditions Window, an assigned Hidden value had no effect - so content intended to be suppressed always published - and the unrecognized condition comment lines could also prevent a <!-- style:Name --> comment on the line directly below the condition opener from styling the block that follows. Hyphenated condition names now scan and evaluate exactly like underscore and alphanumeric names, and the style comment attaches correctly. Note that a hyphenated condition previously assigned Hidden takes effect on regeneration, so content it wraps disappears from the output as originally intended (EPUB2962). Core Improved reliability of application error reporting. When ePublisher encounters an unexpected error, the error report now correctly captures the original problem instead of being interrupted by a secondary failure inside the reporter itself (EPUB2748). Fixed an issue in the Designer Log window where clicking a hyperlink that included file location information (line and column) could trigger an unexpected error. The link now opens the referenced file in the user's associated editor, or shows a brief tooltip identifying the file extension if no editor is associated (EPUB2750). Fixed Target Settings so editing a setting that already has a text value is recognized as a change: the new value is applied to the project and the save indicator is enabled, instead of the edit being silently discarded and the previous value retained (EPUB2710). Fixed the Legacy Installer format manifests so the 2021.1 formats entry references 2021.1 binaries instead of 2020.1, preventing the wrong format version from being installed (EPUB2729). Preference migration now carries customized toolbar layouts and docked-panel arrangements forward when upgrading to a new version, so Designer and Express interface customizations are no longer reset to defaults on every release (EPUB2731). Removed a spurious empty "Image file not found" warning that was emitted for text-only frames (such as FrameMaker cover pages) during image generation; the warning was cosmetic and generated output is unchanged (EPUB2733). AutoMap jobs can now use a Designer or Express project (.wep / .wrp) directly as their stationery by adding useAsStationery="True" to the job's <Project> element, instead of first generating a separate Stationery (.wxsp). The job stages from the live project's format design on each build and applies its own documents and target settings, so design changes flow into automated builds without regenerating Stationery. A job that references a project without the attribute continues to build it in place, and Stationery-based jobs are unchanged. The same project-as-stationery choice is available in the ePublisher AutoMap Administrator when creating a new job, and ePublisher Express can now synchronize a project directly from a .wep or .wrp in addition to a standalone Stationery. When such a project is built without an ePublisher Designer installation present, the generation log now reports that the ePublisher format library could not be found instead of failing with an unclear error (EPUB2808). Fixed online license activation in FIPS-enabled environments. The license server encrypts activation keys with AES, but on a computer with the Windows FIPS security policy enabled the client fell back to an incompatible encryption algorithm and could not decrypt them, leaving the product reporting "Product is unlicensed" even though the license was valid. The client now uses the FIPS-validated AES provider, so license activation succeeds whether or not FIPS mode is enabled (EPUB2820). Fixed generated output containing invalid links into a document excluded from a target. When a target was regenerated after unchecking a document's Include in output setting, hyperlinks and cross-references pointing into that document could still be emitted using stale data from the earlier generation: PDF (XSL-FO) output produced a link that jumps to the top of the first page, and HTML-based outputs produced a link to a page that does not exist. Such links are now removed, leaving only their text, the same as a clean regenerate, and the excluded document's previously generated files are cleaned up instead of lingering in the output (EPUB2837). Added a Deploy scope to each target's deployment configuration in Designer, Express, and the AutoMap Administrator: Everything (complete site — the default and previous behavior), Groups (content only), or Shell (site files only). A scoped deployment publishes only the declared portion of the output into a shared destination, so independently deployed outputs coexist without overwriting one another, and a scoped Clean removes only the files that project deployed. The scope appears next to the Deploy to selection (enabled for formats that support composition), is stored on the target, and can be overridden per AutoMap job target or with the new --deployscope command line option (EPUB2831). Added an Amazon S3 destination type alongside Folder and WebDAV. A named S3 destination stores the bucket address, region, optional named AWS credential profile, and optional CloudFront distribution — never access keys; credentials resolve through the standard AWS profile or instance-role chain. Uploads apply web-appropriate caching (versioned assets cached immutably; pages and maps always revalidated), scoped deployments and Clean affect only the deploying project's own objects, changed pages trigger a CloudFront invalidation, and a dry run option prints every operation without contacting AWS (EPUB2833). Added the AutoMap Composition Job (.wacj), a new job type that assembles independently deployed WebWorks Reverb 2.0 outputs into one site. A composition job lists its member jobs, an optional site table of contents, and the shared destination; running it reads each deployed parcel's composition descriptor, renders and splices the combined navigation manifest into the deployed shell, rebuilds the site's url_maps.xml and sitemap.xml, advances the browser cache key, and for S3 destinations uploads the recomposed files and issues a CloudFront invalidation — in seconds, without rebuilding any content. Members may optionally be built and deployed first as part of the run; a declared table of contents composes exactly the listed parcels, while discovery mode automatically includes every parcel found in the destination (EPUB2832). Added inline destination definitions to AutoMap job files. A .waj or .wacj can now carry the definition of a named Folder or Amazon S3 destination in a DeploySettings element, so a job checked into version control runs on any machine without first seeding that machine's deploy preferences; a new --deploysettings command-line option accepts the same definitions from a file for build-server use. Destinations are still referenced by name, an inline definition takes precedence over a same-named deploy preference (with a warning when the two differ), and a composition forwards its inline definitions to the member jobs it builds. WebDAV destinations, which store credentials, cannot be defined inline (EPUB2834). The AutoMap command line's -t/--target option now applies to job files: the named targets are built, taking precedence over each job target's build attribute, so a multi-target job can rebuild and redeploy a single target without editing the job file. A name that matches no job target is reported, and a job whose selection comes up empty now reports that no targets are selected instead of failing (EPUB2838). An AutoMap Composition Job (.wacj) now resolves its shared destination through the --deploysettings overlay file as well: the composition's own inline definition takes precedence, then the overlay, then the machine's deploy preferences — the same order job-file targets use — with a warning whenever a higher source shadows a differing definition of the same name. A version-controlled destination-definitions file can therefore serve as the single source of truth for a federation's destinations, and a composition forwards the merged definitions to the member jobs it builds (EPUB2839). Added a --dryrun switch to the AutoMap command line that forces every deployment in that run dry, so a live configuration can be rehearsed with one flag: Amazon S3 destinations print their would-be upload, delete, and invalidation operations without contacting AWS; transports without dry-run support (Folder, WebDAV, custom) skip their deployment with a log line; a composition job against a non-S3 destination skips its in-place compose; and a composition forwards the switch to the member jobs it builds. There is deliberately no opposite switch — a destination configured as dry run cannot be forced live from the command line (EPUB2840). Composition Jobs (.wacj) are now first-class citizens of the ePublisher AutoMap Administrator. Composition jobs appear in the jobs list with their own icon and can be scheduled, run, stopped, monitored, renamed, duplicated, and deleted like publishing jobs; a hand-authored .wacj dropped into the Jobs folder is discovered automatically. A third New Job option — Compose published parcels into a website (Composition Job) — creates a composition in the Jobs folder, and a new editor manages the member jobs (with role and optional pre-build per member), the destination (an inline Folder or Amazon S3 definition stored in the job file — no secrets — or a shared deploy preference), and the site table of contents (automatic discovery, or a custom tree with an option to also include newly published parcels). Opening and saving a hand-authored composition preserves its structure, including nested table-of-contents containers and inline destination definitions. Stopping a running composition from the Administrator now works, a composition job refuses to start while another run of the same job is in progress, and email notification preferences apply to composition runs (EPUB2851). Publishing jobs (.waj) gained the same inline destination support in the AutoMap Administrator: a new job-level Deploy Destinations page in the job editor defines Folder or Amazon S3 destinations stored in the job file itself — no secrets — so a job checked into version control, moved to another machine, or scheduled under a different account deploys without first seeding that machine's deploy preferences. Each target's Deploy to list now labels destinations as defined in this job or local, an inline definition overrides a same-named local destination (with a note when the two differ), and the local destinations themselves — stored per Windows user and used by Designer, Express, and AutoMap alike — are now managed directly from the Administrator's Edit menu as Deploy Destinations, no longer only from inside a job's target configuration (EPUB2851). ePublisher Designer and ePublisher Express now manage deploy destinations directly: an Edit > Deploy Destinations menu item and a matching toolbar button open the destinations editor without requiring a project or target to be selected — the same top-level access the AutoMap Administrator's Edit menu gained in this release. Opened this way, the editor offers the Folder and Amazon S3 transports; a format's custom transports continue to appear when the editor is opened from a target's settings, and existing entries of any transport remain editable. The Designer/Express editor now also matches the Administrator's presentation: the Deploy Destinations, Folder Destination, and Amazon S3 Destination dialog titles, the Deployment Type column caption, deployment-type icons in the Add menu and on each entry of the Target Settings Deploy to list, and a note stating that the store is local to the Windows user on the computer and shared by Designer, Express, and AutoMap. The Merge Settings dialog picked up the matching polish: tooltips on the container buttons and always-visible expansion indicators on container nodes (EPUB2854). Added a Preview Output in Browser action beside Explore Output on the AutoMap Administrator's Job menu. Where Explore Output opens the deployed files (a folder, or the Amazon S3 console), Preview Output opens the deployed site itself: a Folder destination opens its entry document directly from the deployment folder, and an Amazon S3 destination derives a best-effort address at click time — the CloudFront distribution's domain when a distribution ID is configured (read with the destination's stored credential profile; nothing new is stored), otherwise the bucket's S3 static-website endpoint, otherwise the direct address of the entry document on a public bucket, each verified before opening. Publishing jobs list one entry per deploying target, a composition job its single destination, and job-inline deploy definitions are honored first, matching Explore Output. The result is explicitly a preview — a derived view of the deployed output that may differ from the production serving URL, since custom domains and CDN configuration remain outside ePublisher's knowledge — and when no address can be derived, the message reports which derivations failed and why instead of a bare error (EPUB2853). Added a Build options box to the Job Info tab of the AutoMap Administrator's job editor, holding job-level build toggles that are stored in the job file (.waj) itself. Its first option, Skip reports, is the job-level equivalent of the command line's --skip-reports switch: when checked, report generation is skipped for every target the job builds, whether the job runs on its schedule, through Run Now, or from a direct command-line invocation. The stored option and the command-line switch combine so that either one enables the skip, and jobs that leave the option unchecked are written exactly as before (EPUB2855). Added a Verbose logging option to the job editor's Build options box, and a matching -q/--quiet switch to the AutoMap command line. Verbose logging is on by default and preserves today's output; unchecking it (or passing --quiet) quiets the run — the generation engine's step-by-step progress messages are omitted from the console and the job's <name>-log.txt, while milestone, warning, and error messages still print, so a scheduled job's log reduces to what needs attention. The per-target generate.log always keeps full detail for troubleshooting. The stored option and the command-line switch combine so that either one quiets the run — whether the job runs on its schedule, through Run Now, or from a direct command-line invocation — and jobs that leave the option checked are written exactly as before (EPUB2856). A federated parcel can now declare its own placement in the composed site's table of contents. When a parcel's Merge Settings nest its group under one or more table-of-contents containers, the parcel build records that arrangement in its composition descriptor, and a Composition Job consuming the deployed parcel — in discovery mode, or as a discovered extra alongside a custom tree — creates those containers and nests the parcel accordingly, merging same-named containers declared by multiple parcels into one shared section. Parcel owners thereby control where their content appears without the composition enumerating every parcel, and a newly published parcel slots into the right section of the site automatically. A placement declared in the composition job itself always takes precedence, parcels without the metadata compose exactly as before, and a conflicting declaration is reported and composes flat rather than failing the composition. The Merge Settings may be authored in the parcel's project or on its AutoMap job's target (.waj) — both flow into the descriptor identically (EPUB2857). A Composition Job (.wacj) now selects each member's output target explicitly and validates every selection before anything is built. A composition-wide target (<Jobs target="…">) applies to every member, an individual member may override it (<Job … target="…"/>), and when neither is given the member's single composition-capable target is detected automatically — preferring the target the member's job actively builds — while a member with several candidates is reported by name rather than one being picked silently. The selected target must exist and use a format that supports composition, and every member must produce the same format; a member whose target cannot compose (for example PDF - XSL-FO) is now reported with the member, target, and format named, replacing a misleading error that directed users to edit that format's definition. A member the composition builds now builds only the selected target, leaving the member's other targets to its own standalone runs, and composing skips — with a warning — any deployed parcel recorded as built by a different format or release than the shell. The Administrator's composition editor gained a matching optional Output target selection, defaulting to automatic detection; a per-member override declared in the composition job file itself surfaces in a read-only Target column whenever one is present, so an active override is visible rather than silently in effect (EPUB2869). Adding a member to a Composition Job no longer requires browsing the file system for the common case: the composition editor's Add button now drops down the publishing jobs (.waj) in the Administrator's Jobs folder for one-click selection, since a composition's members are typically sibling jobs of that folder. Jobs already added as members appear in the list checked and disabled so they cannot be added twice, a Browse choice remains for jobs and projects stored anywhere on disk, and a job picked from the list is stored with the same job-relative reference the editor has always written (EPUB2870). A member a Composition Job builds (Build checked) now deploys to the composition's destination instead of the member job's own, so a composition whose members all build is self-contained: point it at an empty destination and one run builds every member, deploys everything to that destination, and composes the site — and one member job can feed any number of compositions, each publishing to its own destination. Members without Build remain federated: their output is read from the destination as already published by their own jobs, which keep deploying to their own destinations in standalone runs. To match, members added in the composition editor now start with Build checked (the editor writes build="true" explicitly; an absent build attribute in a hand-authored composition still means the federated reading). A new --destination AutoMap command-line switch carries the override and is also available directly: it deploys every target built in that run to the named destination in place of each target's own (EPUB2872). Composition run logs now speak the vocabulary of the composition job itself — members, destinations, and deployed output — instead of engine internals. Messages name the member whose output they concern, a problem is reported once (a parcel skipped for a format or version mismatch is no longer also miscounted as missing), and the run's final error explains why there was nothing to compose: nothing deployed yet, output found but unusable, or output that matches nothing the composition declares. The run also cross-checks each member it does not build up front, warning when the member's own job deploys the selected target to a different destination than the composition's — or to none — so a destination misalignment is named before the compose reports missing output (EPUB2871). Added the ability for ePublisher Designer to work with ePublisher Express projects, so a Designer installation can fully stand in for an Express seat. Designer now opens, builds, synchronizes, and deploys Express projects (.wrp): an Express project opened in Designer keeps the Express experience — Document Manager, stationery synchronization, no Style Designer — and carries the Express window icon, while Designer projects behave exactly as before. A new File > New Project from Stationery menu item creates an Express project from a Stationery or from a Designer project serving as one, using the same dialog Express provides, and the Open dialog now offers both project types in a single filter. The Recent Projects menu and the Start Page show each project's type icon, so the two kinds of project are distinguishable at a glance. Double-clicking a .wrp opens Express when it is installed and Designer otherwise, uninstalling Express hands its file associations to a still-installed Designer instead of leaving them orphaned, and Designer trial installations now include the Express trial project and stationery as well as the Word authoring plugin's help (EPUB2885). Opening a standalone Stationery file (.wxsp) now starts the New Project from Stationery flow instead of failing. Double-clicking a Stationery in Windows Explorer, passing one on the command line, or choosing one in an Open dialog brings up the New Project dialog with that Stationery already selected — in both ePublisher Designer and ePublisher Express — leaving only the project name and location to fill in, the same way opening a document template starts a new document. Previously the products attempted to load the Stationery as a project and failed with an error, a common source of confusion for users trying to put a Stationery to use (EPUB2909). The Style Designer's style list now supports selecting several styles at once, so one edit applies to all of them. Ctrl-click and Shift-click extend the selection within the style category being viewed — paragraph, character, table, page, graphic, or marker — and a value set on any of the Properties, Options, Target Properties, or Target Options tabs is written to every selected style, in place of repeating the same edit style by style. Where the selected styles do not already agree on a value, that value is shown blank rather than showing one style's setting as if it were shared; typing a value there sets it for the whole selection. The [Prototype] style is never part of a multiple selection — including it drops it from the selection — because editing it already reaches every style of that category. Selecting a single style behaves exactly as before (EPUB2913). ePublisher Designer can now hand a project to a colleague as a linked ePublisher Express project. A new File > Save as Express Project menu item creates an Express project (.wrp) whose origin is the Designer project it came from, so one seat authors the formats, output targets, and styles while colleagues work in linked Express projects that pick up each change through the usual synchronization prompt — the arrangement Stationery provides, without publishing a Stationery first. The Designer project is saved before the Express project is created, so the new project opens without an immediate synchronization prompt, and Designer offers to open the result once it is finished. An option, off by default, also carries the Designer project's source documents, groups, and Merge Settings across: group identities are preserved so each group keeps the place its Merge Settings give it, document paths are rewritten to resolve from the new project's location, and fresh document identities are assigned. Document-level style overrides, a deprecated feature, are never carried over; a notice says so when the Designer project has any, since the new project's output would otherwise differ from the original's without explanation (EPUB2905). Fixed a failure that made a project unopenable when a source document was recorded with a volume-relative path (one beginning with a backslash, such as \docs\guide.doc): ePublisher reported the project file as invalid rather than loading it, where such a path now resolves against the volume the project itself is stored on and is written back unchanged when the project is saved (EPUB2917). Fixed the Style Designer showing its Options tab — and the style name in the style list — in bold for styles that have no option of their own. The emphasis counted every recorded option entry, including entries that merely restate the value the style already inherits, so the Options tab could claim a modification while the options list showed nothing set. The tab and style-name emphasis now use the same test as the options list itself: an option counts only when it changes the value the style would otherwise inherit (EPUB2922). Fixed a Groups-scope deployment publishing nothing for a group whose name contains a character that the output path replaces. Generation converts characters such as a comma, colon, ampersand, or number sign in a group name to underscores when it derives the group's output directory, but the deployment looked for the group under its original name, matched no files, and skipped the group without a message — leaving a composed site missing that section. The deployment now derives the directory name exactly as generation does, including the group-name space handling (EPUB2841). Fixed per-parcel AI Assistant knowledge base archives never reaching a shared deployment destination. A scoped deployment treats every file it does not recognize as a group's own as part of the site shell, so the knowledge-parcel-<name>-<hash>.zip archives written at the output root were published by neither a Groups-scope nor a Shell-scope deployment. Each parcel now owns its knowledge base archive and publishes it together with its content (EPUB2842). Fixed a scoped Amazon S3 deployment stopping partway through while still reporting success. The build records some search-index entries — the external and mail addresses collected from a group's baggage — that are never written to disk; the scoped upload passed every recorded entry to Amazon S3 without checking that its file exists, so the first such entry ended the upload after only the group's images had been sent, and the target still reported zero errors. Entries with no file on disk are now skipped, as the Folder destination already did, and a failure during deployment is now counted as a target error so an incomplete deployment can no longer be reported as a successful build (EPUB2844). Fixed a scoped Amazon S3 deployment leaving a CloudFront distribution serving the previous version of the pages it had just re-uploaded. Topic pages, index chunks, and composition descriptors are uploaded under unchanged addresses and are marked as always revalidated, but only the compose step issued a CloudFront invalidation, and only for the site's shared files — so republished content pages stayed stale until the distribution's cache expired. A scoped deployment now invalidates the paths it re-uploaded, and a dry run prints the invalidation it would issue (EPUB2845). Fixed saved toolbar and panel layouts accumulating entries that were never meant to persist. Each session's Recent Projects entries and the report tools were written into the saved layout, so the stored layout grew every time ePublisher Designer or Express was used; one layout examined during testing carried 99 such entries and had grown from 171 KB to 304 KB. These entries are rebuilt at run time and are no longer saved, and an existing layout that already carries them is cleaned up the first time it is loaded (EPUB2910). Fixed the ePublisher Express stationery synchronization prompt browsing for standalone stationery files only. File > Synchronize with Stationery accepts a Designer or Express project as the origin, but the prompt's Browse button listed only .wxsp files, so an Express project whose origin is a .wep or .wrp project — the arrangement Save as Express Project creates — could not be confirmed or re-pointed from the prompt. Both paths now browse for stationeries and projects alike (EPUB2920). Installer Added an /UPDATE command-line switch to the Express, Designer, AutoMap, and Legacy Formats installers. Combined with /S, the installer silently uninstalls the currently installed version and then installs fresh, providing a one-command unattended upgrade or repair for enterprise deployment. On a machine with nothing installed it behaves as a normal silent install. Automatic removal of the prior version is supported for installations of 2021.1 and later; uninstall older versions manually before installing (EPUB2801). Fixed the Express installer's interactive Repair option so it reinstalls into the existing install location instead of relocating the product to the default folder when a custom install location was in use (EPUB2801). Fixed an issue where upgrading more than one ePublisher product with the silent /UPDATE switch, or with the interactive Update/Repair option, could leave shared, runtime-extracted content — such as the Markdown adapter, the bundled Python runtime, and the output format files — at the previously installed version, so corrections included in the upgrade did not take effect for those resources. An update or repair now re-extracts these shared resources in place of the stale copies, so an upgraded installation matches a clean install. First-time (clean) installations were not affected (EPUB2809). Reduced what the packaged helper adapter archive installs. Developer test suites, their fixtures, and an unused experimental adapter were being packaged alongside the production adapter runtime and extracted into the installed product. Only production adapter files are now packaged; an installation upgraded in place may retain the previously extracted files until it is installed cleanly (EPUB2815). The ePublisher AutoMap launcher (WebWorks.AutoMap.exe) is now code-signed, like every other executable in the product. The launcher had shipped unsigned since it was introduced, which could cause it to be flagged by software-restriction or application-allowlisting policies that verify publisher signatures (EPUB2881). Re-signed the Microsoft Word automation templates (wwdoc.dotm, transit.dotm) that ship with the product. The previously shipped wwdoc.dotm carried a digital signature that no longer verified, and both templates carried only the oldest of the three VBA signature formats. Both templates are now signed with the complete set (legacy, agile, and V3), so their macros verify and are trusted under current Microsoft 365 macro security policies, including environments that require V3 signatures (EPUB2931). The Express, Designer, and AutoMap installers now download and install Oracle JDK 26 when no Java installation is present on the machine, replacing the previously downloaded JDK 21. Machines with an existing Java installation are unaffected (EPUB2951). Documentation Refreshed the ePublisher Trial evaluation projects (Exp_Design, Exp_ePub, Exp_Stationery) for the 2026.1 release (EPUB2759). Fixed Issues List of Issues Fixed in This Release Issue ID Summary EPUB2548 Markdown Output - Normalize leading white space for non- Code Fence paragraphs EPUB2553 Markdown Output - Blockquote of code fence paragraph produces invalid markdown EPUB2615 Formats - Breadcrumb links to non-generated paragraphs should resolve to nearest parent paragraph EPUB2635 Markdown - Empty table row at end of table generates WIF with empty table row EPUB2711 Implement variable escaping in Markdown++ adapter EPUB2714 Reverb 2.0 - Draggable menu width with persisted user preference EPUB2715 Reverb 2.0 - Redesign Assistant chat message styling for narrow vertical layouts EPUB2716 Reverb 2.0 - Search-result breadcrumb hydration is O(N) with coalesced flush on panel open EPUB2717 Reverb 2.0 - Progressive hydration with localStorage landmarks tier and IndexedDB search/index tiers EPUB2719 Formats - Fix Markdown++ table rowspan on header cells extending into body rows EPUB2623 Adapters - Markdown front matter parsed and converted to a Markdown++ markers directive on the first content block EPUB2725 Markdown adapter ignores image alt-text field, only forwards title to HTML alt attribute EPUB2748 Core - Application error reports now capture the original problem instead of being interrupted by a secondary failure EPUB2750 User Interface - Designer Log hyperlinks with line/column info now open the referenced file or show a tooltip instead of triggering an error EPUB2754 Reverb 2.0 menu nav button dividers should be position-aware, not type-aware EPUB2756 Adapters - Markdown++ alias warnings conflate custom-vs-custom and auto-vs-custom collisions EPUB2747 Reverb 2.0 - Output now loads for minimal projects without explicit merge configuration EPUB2706 Adapters - DITA Adapter option to use source IDs for paragraph IDs EPUB2718 Reverb 2.0 - Format paragraph style option for assigning Landmark IDs EPUB2722 Reverb 2.0 - Remove ww prefix from HTML id attributes and anchors EPUB2657 Reverb 2.0 - AI Assistant tab support in menu navigation EPUB2759 Documentation - Refresh ePublisher Trial evaluation projects for 2026.1 EPUB2767 Formats - Fix FrameMaker-rasterized image upscaled to max-width and max-height (2025.1 regression) EPUB2769 Formats - Fix Reverb Japanese/CJK search returning wrong results and mis-highlighting EPUB2771 Formats - Fix standard PDF landscape pages rendering in portrait orientation (per-page auto-rotate) EPUB2762 Reverb 2.0 - Generate one AI Assistant knowledge base zip per parcel EPUB2774 Adapters - Helper adapter conversion reliable when stdin is redirected (CI/automation) EPUB2776 Formats - Reverb search character folding (curly and straight apostrophes treated as the same search term) EPUB2777 Formats - Remove CJK stop words so Japanese/Chinese search matches and highlights full terms EPUB2779 Formats - Reverb 2.0 keyboard focus now transfers into iframe content after search submit, page navigation, F6 region cycling, and skip-to-content link activation (previously left focus stranded on the toolbar under file:// deployments) EPUB2780 Formats - Reverb search breaks katakana per character so interior katakana characters are searchable EPUB2785 DITA - Added support for DITA Open Toolkit 4.4 EPUB2787 DITA - The "PDF" output format (adapter-based PDF generation) failed for DITA input: a single topic with no map aborted the build, large or font-heavy documents could hang, and figure images were dropped; all three issues are resolved EPUB2710 User Interface - Target Setting text edits now apply and enable the save indicator EPUB2728 Adapters - Word Add-in (Transit) registry-fallback chain If/End If blocks balanced EPUB2729 Installer - Legacy Installer 2021.1 formats entry now references 2021.1 binaries EPUB2731 Core - Preference migration preserves toolbar and dock-state customizations across upgrades EPUB2733 Formats - Remove spurious empty "Image file not found" warning for text-only frames EPUB2783 FrameMaker - Support FrameMaker 2026 EPUB2794 AutoMap - A malformed or unnamed job file no longer deletes the entire staging directory; such jobs now fail with a clear error and other staged work is preserved EPUB2795 AutoMap - The Administrator can now clear a target setting to an explicit empty value (for example "Copy PDFs from target") instead of the cleared value reverting to the format default EPUB2814 Reverb 2.0 - Disabling Generate Menu now removes the menu region so content fills the full width EPUB2816 Designer no longer crashes with a NullReferenceException when closing the Style Designer pane EPUB2822 Licensing now derives the computer's identity from stable hardware characteristics, so a license stays valid consistently across Windows updates and across 32-bit and 64-bit components. EPUB2825 Reverb - Landmark links of the form #/alias written in source documents now pass through to Reverb output like #context/ links, and Reverb runtime-hash links (#context/, #/) placed in Header.asp or Footer.asp now navigate the help instead of loading the entire help system inside its own content frame. EPUB2828 Reverb 2.0 - The paragraph Dropdown expand and collapse control works again; it stopped responding after the HTML id ww prefix was removed. EPUB2846 AutoMap - A leftover job lock file (<job>.pid) no longer blocks the next run of that job with "Another AutoMap process is already processing this job" when its recorded process is gone or its process ID has been reused by another program; the stale lock is replaced with a note in the log, and a job genuinely being processed still refuses a second run. EPUB2847 AutoMap - License files shared by all accounts on a machine are now read and written safely when AutoMap runs in several Windows sessions at once (for example, two users' scheduled jobs overlapping on a server); startup no longer rewrites the license file, updates can no longer leave a half-written file when a process is stopped, and a stuck process now produces an error naming the lock it holds instead of silently hanging other WebWorks products. EPUB2849 AutoMap - On computers where several user accounts run AutoMap Administrator, another account's scheduled job activity no longer raises an error in the open Administrator window, and scheduling a job whose name matches another account's scheduled task now warns and asks for confirmation instead of silently replacing that task; Run, Stop, Suspend, Resume, and Delete now verify the task actually belongs to the job before acting on it. EPUB2850 Core - Product startup no longer clears a machine's license registration while the license server is unreachable, which could orphan the activation on the server and cause a later key refresh to claim a second one; the registration is now only cleared once the server confirms its release. The automatic reset that removes the license payload to force a key refresh now runs under the machine-wide license lock, so it can no longer discard a payload another session just rewrote, and it records in the license client log whether the license file was missing or present but unreadable. EPUB2852 Core - A license key refresh that reaches the license server but runs out of time waiting for the server to finish preparing the keys no longer reports "License Contract ID not found in license server." That message misdirected troubleshooting toward a contract or activation problem when the server was merely slow (typically a cold start); the timeout now has its own message reporting how long the client waited and advising to simply try again, and the contract message is reserved for definitive failures. The client also waits much longer before giving up: after the first minute of quick checks it continues at a gentler pace for up to five minutes total, configurable via the LicensePayloadTimeoutSeconds application setting, and the wait remains cancelable in Designer and Express -- canceling no longer reports an error. As before, the product keeps using its existing valid license keys when a refresh does not complete. EPUB2859 Core - Generating a project stored on a network (UNC) path no longer fails with "Could not find a part of the path" errors once a generated file's full path reaches 248 characters, which most often affected Reports output because it uses the deepest folder nesting. Long UNC paths were given a malformed extended-length prefix that Windows could not resolve, even when the operating system's long-path support was enabled; the correct form is now used, matching the existing behavior for local drives. EPUB2861 AutoMap - The job log copy written beside a job file (<name>-log.txt, including the copy in an Administrator job folder) and the console output no longer print a blank line before every entry; entries now read single-spaced, matching generate.log, for both publishing (.waj) and composition (.wacj) runs. EPUB2862 AutoMap - Publishing (.waj) and composition (.wacj) job logs now open with a shared start banner (job name, start time, and product version) and close with a finish time, total time, and a summary line reporting warning and error counts (plus parcels composed for a composition). Deployment activity is also fully monitorable from the job log: each deploying target reports its transport, resolved destination, deploy scope, and file count, and transport detail lines that previously appeared only in the Designer and Express log windows -- such as "Cleaning deployment location." and the dry-run operation sets -- now reach the AutoMap console and job log as well. generate.log is unchanged. EPUB2863 AutoMap - The Administrator's jobs list now updates Last Run, Last Result, and Status while the application is open, for both publishing (.waj) and composition (.wacj) jobs: rows refresh immediately for actions taken in the Administrator (Run, Stop, Suspend, Resume, Schedule), and a background poll picks up scheduled or externally started runs, so restarting the application is no longer required to see current job status. The list previously depended entirely on Windows Task Scheduler history events, which can be unavailable (the history channel may be disabled machine-wide) or silently fail to deliver; problems starting that event subscription are now recorded in a TaskScheduler.log diagnostic file in the application preferences folder instead of being ignored. A job that has been scheduled but has not yet run now shows Never in the Last Run column instead of the Windows Task Scheduler placeholder date 11/30/1999. EPUB2864 AutoMap - Preview Output in Browser now understands targets that deploy with Groups scope. Such a target publishes only its groups' content, so its destination has no site entry document by design; the preview previously failed with a bare "entry document was not found" message. When the destination also carries a deployed shell or another deployment's chrome, the preview now opens the job's own group entry page there -- landing on the previewed job's actual content rather than silently opening chrome whose navigation does not include it -- and when the destination has no entry document at all, the message now explains the Groups-scope behavior and directs the user to preview the composition job (or a deployed shell) for the composed site. Everything-scope targets and composition jobs preview unchanged. EPUB2865 AutoMap - A job target's deploy selection can now be cleared: the Deploy to list in the Administrator's job editor offers a "(none)" entry, and a cleared target is written to the job file with no destination attribute. The Designer and Express Target Settings Deploy to list gained the same "(none)" entry, so all three editors behave alike. Targets configured to generate still require a destination, as before. In addition, the Administrator Job menu's Preview Output in Browser and Explore Output lists no longer offer working entries for targets the job is not configured to generate; such a target -- for example a destination set by accident on a target whose generation is disabled -- now appears disabled with a "(not generated)" note instead of leading to output that cannot exist. Composition jobs are unaffected. The Deploy to list (in all three editors) also now shows a destination the job or project declares but this computer does not define -- common when a shared job names a destination from a teammate's deploy preferences -- as a selectable "(not defined on this computer)" entry, instead of displaying it as no deployment at all and losing the declared name on the next selection. EPUB2867 Reverb 2.0 - Generating a target with the AI Assistant's Generate knowledge base setting enabled no longer reports errors when the build contains no documents, such as a chrome-only shell used for federated parcel composition. The knowledge base stage attempted to package and clean up its staging folder even when no knowledge pages existed, producing two "Could not find a part of the path" errors and an empty knowledge zip in the output -- and because the target had errored, its deployment was skipped. A build with no knowledge pages now contributes nothing (no zip, no errors) and deploys normally; builds with documents are unchanged. EPUB2873 AutoMap - A Composition Job now selects a member job's output target from the target list the member's job file declares -- the same list the member builds from and the composition editor offers -- instead of from the member's stationery project. Previously a target named in the composition but declared only by the member's job was rejected with an error listing the wrong target set, and automatic detection could select a stationery target the member's job never builds. Each declared name must still exist in the member's stationery (see EPUB2874); a name the stationery does not define is reported before any member builds, with the same guidance as the build's own error. EPUB2874 AutoMap - A job target whose name is not defined by the job's stationery now fails the build with a clear message naming the target and the stationery, instead of silently rebuilding the target from the format's default settings. The previous behavior, dating to 2006, meant a stationery whose targets were renamed or removed after jobs were authored kept producing output -- configured with format defaults rather than the stationery author's settings -- without any indication. Resave the stationery with the missing target, or remove or rename the job target. Note this is a behavior change: jobs that unknowingly relied on the silent rebuild will now report an error until their stationery is updated. EPUB2875 AutoMap - Job logs no longer contain stray blank lines, and the run summary's warning count now matches the warnings visible in the log. Blank-message warning entries (from tool-output capture during document conversion) were written as empty lines and counted toward the "N warning(s)" tally, and some messages carried their own trailing line breaks; whitespace-only entries are now dropped (a blank error still counts and prints, so a failure signal is never masked), single-line messages are trimmed of trailing breaks, and deliberate multi-line framing such as the per-target result block keeps its spacing. Member build output piped into a composition log is single-spaced the same way. EPUB2876 AutoMap - Non-ASCII characters (arrows, dashes, localized text) in member build messages no longer arrive as substitution characters in a Composition Job's log. Redirected AutoMap console output is now written as UTF-8 and the composition runner reads the member pipe as UTF-8; this also means any redirected AutoMap output (for example a shell redirect to a file) is UTF-8 encoded. EPUB2877 AutoMap - Job and composition logs now mark warning and error lines with the same severity prefixes the per-target generate.log has always used ([WARN] and [ERROR] on an English installation, their localized equivalents elsewhere), so the run summary's "N warning(s)" count can be traced to the N marked lines and one scan convention works across every log the product writes. Errors previously used a different ad-hoc prefix and warnings carried no marker at all; informational lines remain unmarked. EPUB2878 AutoMap - A job launched through the version-independent launcher (WebWorks.AutoMap.exe in the ePublisher program folder, used by scheduled tasks so their action survives upgrades) no longer keeps running after the job itself has finished. The launcher relays the job's console output, and selecting text in its window puts the console into selection mode, which blocks that relay: the window stayed open indefinitely, the job's exit code was never reported to the Windows Task Scheduler (which could then skip the next scheduled run), and Ctrl+C could not recover. On a longer job the stalled relay could also fill its output pipe and suspend the run itself, leaving the job log stopped mid-line with no error reported. The launcher now turns off QuickEdit text selection while a job runs and restores the console's original settings when it exits, reports the job's exit code before draining output, and never waits indefinitely on the console. Non-ASCII characters in relayed messages are also preserved. EPUB2883 AutoMap - Composition placement has two kinds of names - deployed groups, and containers that groups declare in their own Merge Settings - and the composition log and editor now tell them apart. When a Composition Job's merge settings name a container as if it were a group, the log now explains what the name actually is, which deployed groups declare it, and how to place those groups directly, instead of incorrectly advising a redeploy; groups placed into a container by their own declared merge settings are now listed by name with their container rather than summarized as a count; and when a composition's own placement of a group overrides that group's declared container, the log says so. In the Composition Job editor, Add Container now offers container names declared by the member jobs, and Add Group shows a notice when the entered name is known only as a container. Composition placement behavior and composed output are unchanged. EPUB2888 Formats - Improved the reliability and security of the local output preview server used by View Output. Previewed pages now render correctly on the first load instead of sometimes needing a refresh, output files marked read-only can be previewed, and the server is reachable only from the machine running it EPUB2893 Adapters - Markdown++ collision suffix uses _N where the spec mandates -N EPUB2898 Formats - Markdown Output: blockquote-syntax prefix reapplication branch is dead (missing $ sigil) EPUB2904 Adapters - Markdown++ alias sanitization should NFC-normalize (decomposed accents currently mangled) EPUB2926 PDF - XSL-FO - FOP rendering failure is not surfaced; build reports success while the output PDF is missing EPUB2726 Markdown - Markdown-sourced content publishes semantic HTML elements by default EPUB2753 Formats - Progress reporting no longer reports an imbalance for a document containing several popups EPUB2789 Reverb 2.0 - Per-parcel search cache key so updating one parcel does not discard every parcel's cached search data EPUB2790 Reverb 2.0 - Browser cache hygiene across help sets sharing one domain, with a size budget and least-recently-used eviction EPUB2792 Reverb 2.0 - Reformatted output with self-closed elements reports a specific console error instead of a silent unfinished load EPUB2815 Installer - Developer test assets and an unused experimental adapter are excluded from the packaged helper archive EPUB2829 Reverb 2.0 - AI Assistant end-user identity token and plain-language usage-limit handling EPUB2830 Reverb 2.0 - Federated parcel enablers: content-free shell build, composition descriptor, tolerant parcel loading EPUB2831 Core - Deploy scope (Everything, Groups, Shell) publishes a role-appropriate slice into a shared destination EPUB2832 AutoMap - Composition Job (.wacj) composes a federated Reverb 2.0 site from deployed parcels EPUB2833 Core - Amazon S3 destination type with CloudFront invalidation, cache-control policy, and dry run EPUB2837 Core - Links into a document excluded from a target no longer survive an incremental regenerate EPUB2838 AutoMap - -t/--target selects job file targets, overriding each target's build attribute EPUB2839 AutoMap - A composition resolves its destination through the --deploysettings overlay file EPUB2841 Core - Groups-scope deploy handles group names containing characters the output path replaces EPUB2842 Core - Per-parcel AI Assistant knowledge base archives deploy with their parcel EPUB2844 Core - Amazon S3 scoped deploy skips never-written baggage entries instead of aborting silently EPUB2845 Core - Scoped Amazon S3 deploy invalidates the CloudFront paths it re-uploaded EPUB2854 User Interface - Deploy Destinations opens from the Edit menu and toolbar in Designer and Express, with Administrator parity EPUB2855 AutoMap - Job-level Build options box with a Skip reports option stored in the job file EPUB2856 AutoMap - Verbose logging build option with a matching -q/--quiet command-line switch EPUB2858 Formats - Apache FOP and DITA Open Toolkit build log lines are recorded at their actual severity EPUB2866 Core - Log and console banners print the three-part display version EPUB2871 AutoMap - Composition logs report a skipped member once and explain why a compose found nothing EPUB2881 Installer - AutoMap launcher shim is code-signed like the rest of the product EPUB2910 User Interface - Saved toolbar layouts no longer accumulate transient Recent Projects and report entries EPUB2912 Reverb 2.0 - A Merge Settings container holding a single group no longer fails the build EPUB2916 User Interface - Style Designer rename resolves the rule collection from the rule being renamed EPUB2917 Core - A project with a volume-relative document path loads instead of reporting an invalid project EPUB2920 User Interface - Synchronization prompt browses the same file types as File > Synchronize with Stationery EPUB2921 Markdown - multiline tables honor the table's Cell Head and Cell Body paragraph formats EPUB2922 User Interface - Style Designer Options tab and style name bold only for options set on the style EPUB2923 PDF - XSL-FO - Graphic style dimension properties size raster images at render time EPUB2924 Markdown - Markdown tables declare column definitions so Table style column-width options apply EPUB2927 Reverb 2.0 - Optimized reader mode: Alt+A jumps to the AI Assistant chat input EPUB2931 Installer - Word automation templates re-signed with complete VBA signature set (legacy, agile, V3) EPUB2932 Adapters - Markdown adapter rewrites mailto: and other URI-scheme link targets as file paths EPUB2933 Adapters - Word conversions fail on systems with June 2026 Windows updates (macro arguments arrive empty) EPUB2937 PDF - XSL-FO - Code fence taller than one page overflows the bottom margin instead of page breaking EPUB2939 Markdown - Inline code spans publish raw angle brackets and ampersands instead of HTML entities EPUB2940 Markdown - Intra-word underscores publish unescaped and no longer parse as emphasis EPUB2941 Adapters - DITA links to non-DITA files publish as plain text and baggage files are not copied to output EPUB2942 Formats - Table footnotes emitted twice when table is nested EPUB2943 Word - Custom footnote marks rendered with an extra auto-number EPUB2946 Reverb 2.0 - AI Assistant renders a Powered by WebWorks attribution line when the assistant's Platform plan calls for one EPUB2947 Reverb 2.0 - Links stop responding after browser Back when output is viewed over HTTP EPUB2948 Reverb 2.0 - Links report flags runtime hash links (#/, #context/) as unresolved EPUB2949 Reverb 2.0 - Landmark data cached site-wide goes stale when one parcel is redeployed EPUB2951 Installer - Java download upgraded from JDK 21 to JDK 26 EPUB2952 Reverb 2.0 - Composed cache key incorporates the shell generation so a shell redeploy refreshes returning readers EPUB2953 Core - Scoped S3 deploy invalidates changed shared chrome and shortens its freshness window so shell updates reach readers EPUB2954 Reverb 2.0 - Search page degrades gracefully when its markup and the site's scope state come from different builds EPUB2955 Reverb 2.0 - AI Assistant caps page context so sends from large pages no longer fail EPUB2959 Reverb 2.0 - Site shell emits page- and popup-referenced chrome so federated deploys serve the complete file set EPUB2961 Reverb 2.0 - Default Tab setting selects the menu tab readers see on first load